/*
 * @Description: 描述性文件
 * @Date: 2022-01-11 12:18:14
 * @Author: yeming
 */

// 一、坐标相关

// 1.1、坐标定义
// Pick----屏幕坐标  
// Cartesian----世界坐标  new Cesium.Cartesian3(x, y, z)
// cartographic-----地理坐标（弧度） new Cesium.Cartographic(longitude, latitude, height)。

// 1.2、坐标转换  https://blog.csdn.net/qq_34149805/article/details/78393540
// Cartesian3 ==> Cartesian2            Cesium.Cartesian2.fromCartesian3(cartesian, result)→ Cartesian2
// 经纬度坐标（WGS84） ==> Cartesian3　　  Cesium.Cartesian3.fromDegrees(longitude, latitude, height, ellipsoid, result) → Cartesian3
// 弧度坐标 ==> Cartesian3                Cesium.Cartesian3.fromRadians(longitude, latitude, height, ellipsoid, result) → Cartesian3
// Cartesian3 ==> Cartographic          Cesium.Cartographic.fromCartesian(cartesian, ellipsoid, result) → Cartographic
// 经纬度坐标（WGS84） ==> Cartographic    Cesium.Cartographic.fromDegrees(longitude, latitude, height, result) → Cartographic

// 1.3、单位
// 经纬度坐标和弧度坐标也可以通过Cesium.Math来转换。
// Cesium.CesiumMath.toDegrees(radians) ==> Number
// Cesium.CesiumMath.toRadians(degrees) ==> Number

// 1.4、坐标系
// new Cesium.Cartesian2(1,1) // 表示一个二维笛卡尔坐标系，也就是直角坐标系（屏幕坐标系）
// new Cesium.Cartesian3(1,1,1) // 表示一个三维笛卡尔坐标系，也是直角坐标系(就是真实世界的坐标系)

// 1.5、二维屏幕坐标系到三维坐标系的转换
// var pick1= scene.globe.pick(viewer.camera.getPickRay(pt1), scene) // 其中pt1为一个二维屏幕坐标。

// 1.6、三维坐标到地理坐标的转换
// var geoPt1= scene.globe.ellipsoid.cartesianToCartographic(pick1) //其中pick1是一个Cesium.Cartesian3对象。

// 1.7、地理坐标到经纬度坐标的转换
// var point1=[geoPt1.longitude / Math.PI * 180,geoPt1.latitude / Math.PI * 180]; // 其中geoPt1是一个地理坐标。

// 1.8、经纬度坐标转地理坐标（弧度）
// var cartographic = Cesium.Cartographic.fromDegree(point) // point是经纬度值 116.274005, 40.046237, 500
// var coord_wgs84 = Cesium.Cartographic.fromDegrees(lng, lat, alt);//单位：度，度，米

// 1.9、经纬度坐标转世界坐标
// var cartesian = Cesium.Cartesian3.fromDegree(point) // 116.274005, 40.046237, 500

// 1.10、计算两个三维坐标系之间的距离
// var d = Cesium.Cartesian3.distance(
//   new Cesium.Cartesian3(pick1.x, pick1.y, pick1.z),
//   new Cesium.Cartesian3(pick3.x, pick3.y, pick3.z)
// ); // pick1、pick3都是三维坐标系

// 二、hpr相关（https://blog.csdn.net/u011575168/article/details/83097894）
// 2.1、hpr 偏转（机头左右摇摆 = yaw）、俯仰（机头上下摇摆）、横滚（机身绕中轴线旋转）


// 三、ol绘制图形（https://www.cnblogs.com/dayspring/p/11552421.html）
// 3.1、OpenLayers的显示构成由外向内为：

// ol.Map：地图对象。
// ol.layer.Vector：图层对象layer。Map含有多个layer，最终的显示效果是由多个layer叠加而成。
// ol.source.Vector和ol.style.Style：
// 一个layer由两部分构成：数据源source和样式style。其含义是，该layer下所有的图形都使用同样的绘制样式。

// ol.source.Vector：数据源，提供该layer下所有的图形信息。
// ol.style.Style：绘制样式，为该layer下所有的图形共用。具体见后面ol.style.Style详解。
// ol.Feature：要素，即图形。一个source下含多个Feature。Feature是所有图形的一个封装，具体代表什么图形由内部的geometry参数决定。
// ol.geom.Geometry：具体图形，决定了一个Feature具体代表什么图形。其类型有：
//    ol.geom.Point：点。
//    ol.geom.LineString：线。
//    ol.geom.Circle：圆。
//    ol.geom.LinearRing：线性环。
//    ol.geom.MultiPoint：多点。
//    ol.geom.MultiLineString：多线。
//    ol.geom.MultiPolygon：多面。
//    ol.geom.Polygon：多边形。

// 3.2、因此，要绘制一个点，其过程为：

// 调用new ol.geom.Point来创建一个geometry对象。
// 将geometry对象作为属性，调用new ol.Feature来创建一个Feature。
// 多个Feature构成一个features数组，作为属性，调用new ol.source.Vector来创建一个source。
// 调用new ol.style.Style来创建一个style。
// 将3和4中创建的source和style作为属性，调用来new ol.layer.Vector创建一个layer。
// 将layer作为属性，调用new ol.Map来创建Map。
// 若要清空一个layer的所有图形，那么获取该layer的source，然后调用source.clear()即可。
